<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Join (SQL)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Join_(SQL)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Join_SQL rootpage-Join_SQL skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Join (SQL)</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Ein <a href="SQL" title="SQL">SQL</a>-<b>Join</b> (deutsch: Verbund) bildet aus den Datensätzen zweier <a href="Datenbanktabelle" title="Datenbanktabelle">Tabellen</a> einer <a href="Relationale_Datenbank" title="Relationale Datenbank">relationalen Datenbank</a> eine Ergebnistabelle, deren Datensätze Attribute beider Tabellen entsprechend einer angegebenen Verbundbedingung enthält. Er ist die Umsetzung des Konzepts des Verbunds der <a href="Relationale_Algebra" title="Relationale Algebra">relationalen Algebra</a> in der <a href="Abfragesprache" title="Abfragesprache">Abfragesprache</a> SQL. Der <a href="ISO" class="mw-redirect" title="ISO">ISO</a>-Standard für SQL beschreibt folgende Arten von Joins<sup id="cite_ref-date_1-0" class="reference"><a href="#cite_note-date-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-ISO_2-0" class="reference"><a href="#cite_note-ISO-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>:
</p>
<ul><li>Das kartesische Produkt <code>CROSS JOIN</code>,</li>
<li>den inneren Verbund in der Form des natürlichen Verbunds <code>NATURAL JOIN</code> und anderer Varianten, sowie</li>
<li>den äußeren Verbund in den Formen <code>LEFT OUTER JOIN</code>, <code>RIGHT OUTER JOIN</code> und <code>FULL OUTER JOIN</code>.</li></ul>
<p>Als Spezialfall kann man auch einen Verbund einer Tabelle mit sich selbst bilden, dies wird als <i>Self Join</i> bezeichnet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel-Tabellen">Beispiel-Tabellen</h2></div>
<p>Zur Demonstration der verschiedenen Formen des Verbunds werden als Beispiel die Tabellen <code>Mitarbeiter</code> und <code>Abteilung</code> verwendet. Über einen Mitarbeiter wird die identifizierende <code>MId</code>, sein Name und die <code>AbtId</code> der Abteilung, bei der er beschäftigt ist, verzeichnet. Die Abteilung hat die Attribute <code>AbtId</code>, die die Abteilung identifiziert sowie ihren Namen. Ein Verbund verknüpft Informationen aus den beiden Tabellen.
</p>
<table class="wikitable" style="text-align:center; float:left; margin-right:5px;">
<caption>Mitarbeiter
</caption>
<tbody><tr>
<th>MId
</th>
<th>Name</th>
<th>AbtId
</th></tr>
<tr>
<td>M1
</td>
<td>Müller</td>
<td>31
</td></tr>
<tr>
<td>M2
</td>
<td>Schmidt</td>
<td>32
</td></tr>
<tr>
<td>M3
</td>
<td>Müller</td>
<td>32
</td></tr>
<tr>
<td>M4
</td>
<td>Meyer</td>
<td>NULL
</td></tr></tbody></table>
<table class="wikitable" style="text-align:center; float:left; margin-left:5px;">
<caption>Abteilung
</caption>
<tbody><tr>
<th>AbtId</th>
<th>AbtName
</th></tr>
<tr>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>33</td>
<td>Marketing
</td></tr></tbody></table>
<div style="clear:both;"></div>
<p>Die Beispiel-Tabellen haben folgende Besonderheiten:
</p>
<ul><li>Die Mitarbeiterin oder der Mitarbeiter namens „Meyer“ ist keiner Abteilung zugeordnet. Der Wert <code>NULL</code> als <code>AbtId</code> bedeutet in SQL, dass dieser Wert <i>unbekannt</i> ist.</li>
<li>Die Abteilung „Marketing“ hat keine zugeordneten Mitarbeiter.</li></ul>
<p>Am Beispiel dieser beiden Tabellen kann man die verschiedenen Formen des Verbunds veranschaulichen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Kartesisches_Produkt_(CROSS_JOIN)"><span id="Kartesisches_Produkt_.28CROSS_JOIN.29"></span>Kartesisches Produkt (CROSS JOIN)</h2></div>
<p>Der <code>CROSS JOIN</code> zweier Tabellen bildet das <a href="Kartesisches_Produkt" title="Kartesisches Produkt">kartesische Produkt</a> der Datensätze der beiden Tabellen. Dabei wird jeder Datensatz der ersten Tabelle mit jedem anderen der zweiten Tabelle verknüpft. Wenn die beiden Tabellen gleichnamige Attribute haben, werden sie durch das Voranstellen des Tabellennamens ergänzt.
</p><p>Beispiel des <code>CROSS JOIN</code>s:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">CROSS</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span>
</pre></div>
<p>Die explizite Benennung des kartesischen Produkts wurde mit <a href="SQL#Chronologie" title="SQL">SQL-Standard SQL-92</a> eingeführt. Im SQL-Standard von 1989 erhält man dasselbe Ergebnis mit folgender Anweisung<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>Anm 1<span class="cite-bracket">]</span></a></sup>:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="p">,</span><span class="w"> </span><span class="n">Abteilung</span>
</pre></div>
<p>Das Ergebnis hat 4 × 3 Datensätze, weil es 4 Mitarbeiter und 3 Abteilungen gibt; es besteht aus <i>allen</i> möglichen Kombinationen der Datensätze der beiden Tabellen. Da die <code>AbtId</code> in beiden Tabellen vorkommt, werden die beiden Attribute in der Ergebnistabelle durch das Voranstellen des Tabellennamens eindeutig gemacht.
</p>
<table class="wikitable" style="text-align:center">
<tbody><tr>
<th>MId
</th>
<th>Name</th>
<th>Mitarbeiter.AbtId</th>
<th>Abteilung.AbtId</th>
<th>AbtName
</th></tr>
<tr>
<td>M1
</td>
<td>Müller</td>
<td>31</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M1
</td>
<td>Müller</td>
<td>31</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M1
</td>
<td>Müller</td>
<td>31</td>
<td>33</td>
<td>Marketing
</td></tr>
<tr>
<td>M2
</td>
<td>Schmidt</td>
<td>32</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M2
</td>
<td>Schmidt</td>
<td>32</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M2
</td>
<td>Schmidt</td>
<td>32</td>
<td>33</td>
<td>Marketing
</td></tr>
<tr>
<td>M3
</td>
<td>Müller</td>
<td>32</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M3
</td>
<td>Müller</td>
<td>32</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M3
</td>
<td>Müller</td>
<td>32</td>
<td>33</td>
<td>Marketing
</td></tr>
<tr>
<td>M4
</td>
<td>Meyer</td>
<td>NULL</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M4
</td>
<td>Meyer</td>
<td>NULL</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M4
</td>
<td>Meyer</td>
<td>NULL</td>
<td>33</td>
<td>Marketing
</td></tr></tbody></table>
<div style="clear:both;"></div>
<div class="mw-heading mw-heading2"><h2 id="Innerer_Verbund">Innerer Verbund</h2></div>
<p>Der innere Verbund zweier Tabellen hat zum Ergebnis die Kombination der Datensätze der beteiligten Tabellen, die die Verbundbedingung erfüllen. In der Regel verlangt die Verbundbedingung die Gleichheit von Werten bestimmter Attribute in den beiden Tabellen. Sie kann aber auch andere Vergleichsoperatoren als die Gleichheit enthalten.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>Anm 2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="NATURAL_JOIN">NATURAL JOIN</h3></div>
<p>Die grundlegende Form des inneren Verbunds ist der natürliche Verbund <code>NATURAL JOIN</code>.
</p><p>Beim natürlichen Verbund werden <i>die</i> Datensätze der beiden beteiligten Tabellen miteinander verknüpft, deren Werte an den gleichnamigen Attributen <i>übereinstimmen</i>. Es werden also nur die „<i>passenden</i>“ Kombinationen gebildet und nicht wie beim kartesischen Produkt <i>alle möglichen</i> Kombinationen.
</p><p>Beispiel für den <code>NATURAL JOIN</code>:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">NATURAL</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span>
</pre></div>
<p>In unserem Beispiel haben die beiden Tabellen ein gemeinsames Attribut, die <code>AbtID</code>. Im natürlichen Verbund wird dementsprechend jedem Mitarbeiter die Abteilung zugeordnet, deren <code>AbtId</code> bei ihm verzeichnet ist. Da nun in jeder Zeile der Wert von <code>AbtId</code> in beiden Tabellen identisch ist, erscheint das Attribut nur einmal in der Ergebnistabelle:
</p>
<table class="wikitable">
<tbody><tr>
<th>MId
</th>
<th>Name
</th>
<th>AbtID
</th>
<th>AbtName
</th></tr>
<tr>
<td>M1
</td>
<td>Müller
</td>
<td>31
</td>
<td>Verkauf
</td></tr>
<tr>
<td>M2
</td>
<td>Schmidt
</td>
<td>32
</td>
<td>Technik
</td></tr>
<tr>
<td>M3
</td>
<td>Müller
</td>
<td>32
</td>
<td>Technik
</td></tr></tbody></table>
<div style="clear:both;"></div>
<p>Da die Mitarbeiterin oder der Mitarbeiter namens „Meyer“ keiner Abteilung zugeordnet ist, erscheint „M4“ nicht im Ergebnis. Auch die Abteilung „Marketing“ kommt nicht vor, weil ihr ja gar kein Mitarbeiter zugeordnet ist.
</p>
<div class="mw-heading mw-heading3"><h3 id="JOIN_..._USING_...">JOIN ... USING ...</h3></div>
<p>Beim natürlichen Verbund werden die Kombinationen durch den Vergleich der Werte <i>aller</i> gleichnamigen Attribute der beiden Tabellen gebildet. Oft will man jedoch explizit angeben, welche der Attribute für das Verknüpfen der Datensätze verwendet werden sollen. Dafür gibt es die Form <code>JOIN ... USING ...</code>
</p><p>In unserem Beispiel:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="p">(</span><span class="n">AbtID</span><span class="p">)</span>
</pre></div>
<p>Das Ergebnis ist in diesem Beispiel identisch mit dem des natürlichen Verbunds.
</p><p>Diese Form des Verbunds ist der Variante mit <code>NATURAL JOIN</code> vorzuziehen, weil die explizite Angabe der Attribute sicherstellt, dass keine unerwünschten Kombinationen gebildet werden, wenn die beteiligten Tabellen erweitert werden. Wird in unserem Beispiel etwa in die Tabelle <code>Mitarbeiter</code> das neue Attribut <code>Ort</code> für den Wohnort des Mitarbeiters eingeführt und in der Tabelle <code>Abteilung</code> auch ein Attribut namens <code>Ort</code> für den Standort der Abteilung, dann werden beim <code>NATURAL JOIN</code> die Attribute <code>AbtId</code> <i>und</i> <code>Ort</code> für das Bilden der verknüpften Datensätze verglichen, was nicht der Intention entspricht, den Mitarbeitern ihre Abteilungen zuzuordnen.
</p>
<div class="mw-heading mw-heading3"><h3 id="JOIN_..._ON_...">JOIN ... ON ...</h3></div>
<p>Es ist auch möglich, einen Verbund zwischen Tabellen zu bilden, bei denen die Bezeichnungen der zu vergleichenden Attribute nicht übereinstimmen oder bei dem ein anderer Operator als <code>=</code> verwendet werden soll.
</p><p>Für die Beispiel-Tabellen lautet eine Anweisung mit dieser Form des Verbunds
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="p">.</span><span class="n">AbtId</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Abteilung</span><span class="p">.</span><span class="n">AbtId</span><span class="p">;</span>
</pre></div>
<p>Ergebnis:
</p>
<table class="wikitable">
<tbody><tr>
<th>MId
</th>
<th>Name
</th>
<th>Mitarbeiter.AbtId
</th>
<th>Abteilung.AbtId
</th>
<th>AbtName
</th></tr>
<tr>
<td>M1
</td>
<td>Müller
</td>
<td>31
</td>
<td>31
</td>
<td>Verkauf
</td></tr>
<tr>
<td>M2
</td>
<td>Schmidt
</td>
<td>32
</td>
<td>32
</td>
<td>Technik
</td></tr>
<tr>
<td>M3
</td>
<td>Müller
</td>
<td>32
</td>
<td>32
</td>
<td>Technik
</td></tr></tbody></table>
<p>In diesem Beispiel entspricht das Ergebnis der Anweisung mit <code>JOIN ... ON ...</code> dem mit
<code>JOIN ... USING ...</code>. Der Unterschied besteht nur darin, dass die verglichenen Attribute <code>Mitarbeiter.AbtId</code> und <code>Abteilung.AbtId</code> mit identischen Werten <i>beide</i> im Ergebnis ausgegeben werden.
</p><p>Wenn man einen Verbund über Attribute mit <i>unterschiedlichen</i> Bezeichnungen bildet, dann kann <code>JOIN ... USING ...</code> nicht verwendet werden, sondern man <i>muss</i> die Anweisung mit <code>JOIN ... ON ...</code> bilden. (Auch dann erhält man bei <code>SELECT * FROM ...</code> identische Werte in den beiden Join-Attributen, von denen man jedoch durch explizites Angeben der gewünschten Attribute hinter <code>SELECT</code> nur eines ausgeben kann.)
</p><p>Man kann vor die beiden Formen <code>JOIN ... USING ...</code> und <code>JOIN ... ON ...</code> auch das optionale Schlüsselwort <code>INNER</code> setzen, um zu unterstreichen, dass es sich um einen inneren Verbund handelt.
</p><p>
Im SQL-Standard von 1989 würde man die obige Anweisung so formulieren:</p><div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="p">,</span><span class="w"> </span><span class="n">Abteilung</span>
<span class="k">WHERE</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="p">.</span><span class="n">AbtId</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Abteilung</span><span class="p">.</span><span class="n">AbtId</span>
</pre></div>
<p>In der ersten Form der Anweisung wird der Verbund <i>explizit</i> angegeben, während in der zweiten Variante zunächst ein kartesisches Produkt gebildet wird und der Verbund durch die anschließende Restriktion mit der Bedingung <code>Mitarbeiter.AbtId = Abteilung.AbtId</code> erreicht wird.
</p><p>Die Formen des inneren Verbunds in den bisherigen Beispielen werden in der Literatur auch als <i>Equijoin</i> (deutsch: Gleichverbund) bezeichnet, weil in der Bedingung für den Verbund der Gleichheitsoperator verwendet wird. Es ist in der Variante <code>JOIN ... ON ...</code> auch möglich eine <i>beliebige</i> Bedingung für das Verknüpfen der Datensätze der beteiligten Tabellen anzugeben, z. B. mit dem Vergleichsoperator <code>≤</code>. In diesem Fall bezeichnet man den Verbund als <i>Theta-Join</i>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Äußerer_Verbund_(OUTER_JOIN)"><span id=".C3.84u.C3.9Ferer_Verbund_.28OUTER_JOIN.29"></span>Äußerer Verbund (OUTER JOIN)</h2></div>
<p>In allen Formen des inneren Verbundes der Beispiel-Tabellen kommt der Mitarbeiter mit der <code>MId</code> „M4“ nicht vor, weil ihm ja keine Abteilung zugeordnet ist. Und auch die Abteilung „Marketing“ kommt nicht vor, weil sie keine Mitarbeiter hat.
</p><p>Die Formen des <i>Outer Join</i>s (deutsch: äußerer Verbund) beziehen Datensätze in den Verbund ein, zu denen es keine Entsprechungen der Werte in den beiden Tabellen gibt. Der äußere Verbund muss also immer eingesetzt werden, wenn unbekannte oder fehlende Information im Spiel ist.
</p><p>Sollen im Beispiel der Mitarbeiter und Abteilungen <i>alle</i> Mitarbeiter mit ihren Abteilungen ausgegeben werden, auch diejenigen, die keiner Abteilung zugeordnet sind, dann ist ein äußerer Verbund erforderlich.
</p>
<div class="mw-heading mw-heading3"><h3 id="LEFT_OUTER_JOIN">LEFT OUTER JOIN</h3></div>
<p>Das Ergebnis von <code>T<sub>1</sub> LEFT OUTER JOIN T<sub>2</sub></code> der Tabellen T<sub>1</sub> und T<sub>2</sub> enthält <i>alle</i> Datensätze der Tabelle T<sub>1</sub> <i>links</i> des Schlüsselworts <code>JOIN</code>, selbst wenn es keinen korrespondierenden Datensatz der rechten Tabelle T<sub>2</sub> gibt. Die fehlenden Werte aus T<sub>2</sub> werden durch NULL aufgefüllt. Das Schlüsselwort <code>OUTER</code> ist in allen Beispielen nicht erforderlich, kann aber geschrieben werden, um einen Leser auf den äußeren Verbund aufmerksam zu machen.
</p><p>Im Beispiel der Mitarbeiter und Abteilungen ergibt
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">LEFT</span><span class="w"> </span><span class="k">OUTER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="p">(</span><span class="n">AbtId</span><span class="p">)</span>
</pre></div>
<table class="wikitable" style="text-align:center">
<tbody><tr>
<th>MId</th>
<th>Name</th>
<th>AbtId</th>
<th>AbtName
</th></tr>
<tr>
<td>M1</td>
<td>Müller</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M2</td>
<td>Schmidt</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M3</td>
<td>Müller</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M4</td>
<td>Meyer</td>
<td>NULL</td>
<td>NULL
</td></tr></tbody></table>
<p>Das Ergebnis enthält nun auch den Mitarbeiter mit der <code>MId</code> „M4“ und die Attribute aus der verknüpften Tabelle Abteilung sind NULL.
</p>
<div class="mw-heading mw-heading3"><h3 id="RIGHT_OUTER_JOIN">RIGHT OUTER JOIN</h3></div>
<p>Ein <code>RIGHT OUTER JOIN</code> bildet den inneren Verbund der beiden Tabellen und ergänzt ihn um je einen Datensatz für Datensätze in der rechten Tabelle, zu denen es keine Korrespondenz in der linken Tabelle gibt.
</p><p>Im Beispiel der Mitarbeiter und Abteilungen ergibt
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">RIGHT</span><span class="w"> </span><span class="k">OUTER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="p">(</span><span class="n">AbtId</span><span class="p">)</span>
</pre></div>
<table class="wikitable" style="text-align:center">
<tbody><tr>
<th>MId</th>
<th>Name</th>
<th>AbtId</th>
<th>AbtName
</th></tr>
<tr>
<td>M1</td>
<td>Müller</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M2</td>
<td>Schmidt</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M3</td>
<td>Müller</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>NULL</td>
<td>NULL</td>
<td>33</td>
<td>Marketing
</td></tr></tbody></table>
<p>Das Ergebnis enthält nun einen Datensatz für die Abteilung „Marketing“, der kein Angestellter zugeordnet ist, weshalb die Attribute <code>MId</code> und <code>Name</code> NULL sind.
</p><p>Ein weiteres Beispiel, bei dem der äußere Verbund benötigt wird: Es sollen <i>alle</i> Abteilungen mit der Anzahl ihrer Mitarbeiter ausgegeben werden. Da beim inneren Verbund zur Abteilung mit der <code>AbtId</code> 33 gar kein Datensatz ausgegeben werden würde, muss die Anweisung mit dem äußeren Verbund formuliert werden:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">AbtName</span><span class="p">,</span><span class="w"> </span><span class="k">count</span><span class="p">(</span><span class="n">MId</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">Mitarbeiterzahl</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">RIGHT</span><span class="w"> </span><span class="k">OUTER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="p">(</span><span class="n">AbtId</span><span class="p">)</span>
<span class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">AbtId</span><span class="p">,</span><span class="w"> </span><span class="n">AbtName</span>
</pre></div><p>Ergebnis:
</p><table class="wikitable" style="text-align:center">
<tbody><tr>
<th>AbtName</th>
<th>Mitarbeiterzahl
</th></tr>
<tr>
<td>Verkauf</td>
<td>1
</td></tr>
<tr>
<td>Technik</td>
<td>2
</td></tr>
<tr>
<td>Marketing</td>
<td>0
</td></tr></tbody></table>
<div class="mw-heading mw-heading3"><h3 id="FULL_OUTER_JOIN">FULL OUTER JOIN</h3></div>
<p>Ein <code>FULL OUTER JOIN</code> ist die Vereinigungsmenge der Ergebnisse des <code>LEFT</code> und des <code>RIGHT OUTER JOIN</code>s.
</p><p>Das Beispiel für Mitarbeiter und Abteilungen:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">FULL</span><span class="w"> </span><span class="k">OUTER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="p">(</span><span class="n">AbtId</span><span class="p">)</span>
</pre></div>
<table class="wikitable" style="text-align:center">
<tbody><tr>
<th>MId</th>
<th>Name</th>
<th>AbtId</th>
<th>AbtName
</th></tr>
<tr>
<td>M1</td>
<td>Müller</td>
<td>31</td>
<td>Verkauf
</td></tr>
<tr>
<td>M2</td>
<td>Schmidt</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M3</td>
<td>Müller</td>
<td>32</td>
<td>Technik
</td></tr>
<tr>
<td>M4
</td>
<td>Meyer
</td>
<td>NULL
</td>
<td>NULL
</td></tr>
<tr>
<td>NULL</td>
<td>NULL</td>
<td>33</td>
<td>Marketing
</td></tr></tbody></table>
<p>Weitere Varianten der Syntax des äußeren Verbunds sind im Syntaxdiagramm weiter unten enthalten.
</p>
<div class="mw-heading mw-heading2"><h2 id="Self_Join">Self Join</h2></div>
<p>Ein <i>Self Join</i> ist ein Join einer Tabelle mit sich selbst. Das bedeutet, dass Datensätze der Tabelle mit anderen Datensätzen derselben Tabelle verglichen werden müssen. Damit man in SQL Werte der Datensätze <i>derselben</i> Tabelle vergleichen kann, muss man in der Anweisung explizite Bezeichnungen für zwei Tupelvariablen vergeben, die beide die Datensätze der Tabelle durchlaufen können.
</p><p>Als Beispiel soll überprüft werden, ob in der Tabelle Mitarbeiter zwei Mitarbeiter mit gleichem Namen aber verschiedener MId vorkommen. Im folgenden <i>Self Join</i> werden die Tupelvariablen <code>MA</code> und <code>MB</code> für die Tabelle „Mitarbeiter“ definiert, um den Vergleich durchführen zu können.
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">MA</span><span class="p">.</span><span class="n">MId</span><span class="p">,</span><span class="w"> </span><span class="n">MA</span><span class="p">.</span><span class="n">Name</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="n">MA</span><span class="w"> </span><span class="k">CROSS</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="n">MB</span>
<span class="k">WHERE</span><span class="w"> </span><span class="n">MA</span><span class="p">.</span><span class="n">MId</span><span class="w"> </span><span class="o"><></span><span class="w"> </span><span class="n">MB</span><span class="p">.</span><span class="n">MId</span><span class="w"> </span><span class="k">AND</span><span class="w"> </span><span class="n">MA</span><span class="p">.</span><span class="n">Name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MB</span><span class="p">.</span><span class="n">Name</span>
</pre></div><p>Als Ergebnis wird ausgegeben:
</p><table class="wikitable" style="text-align:center; float:left; margin-right:5px;">
<tbody><tr>
<th>MId</th>
<th>Name
</th></tr>
<tr>
<td>M1</td>
<td>Müller
</td></tr>
<tr>
<td>M3</td>
<td>Müller
</td></tr></tbody></table>
<div style="clear:both;"></div>
<p>Tatsächlich erzeugt SQL zu jeder Tabelle bei der Verarbeitung einer SELECT-Anweisung eine Tupelvariable, die normalerweise gleich heißt, wie die Tabelle selbst. Wenn die Anweisung zum Beispiel lautet <code>select * from Mitarbeiter where Mitarbeiter.MId = 'M1'</code> wird eine Tupelvariable verwendet, die wie die Tabelle <code>Mitarbeiter</code> heißt und als Inhalt jeden Datensatz der Tabelle annehmen kann. Die Filterbedingung <code>MId = 'M1'</code> wird dann dadurch überprüft, dass die Tupelvariable die Tabelle durchläuft. Es ist möglich, die Tupelvariable explizit zu benennen, etwa <code>select * from Mitarbeiter M where M.MId = 'M1'</code>.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> Dies wird beim <i>Self Join</i> eingesetzt, um zwei Tupelvariablen für ein und dieselbe Tabelle zu haben, wodurch deren Datensätze miteinander verglichen werden können.
</p>
<div style="clear:both;"></div>
<div class="mw-heading mw-heading2"><h2 id="Syntaxdiagramm">Syntaxdiagramm</h2></div>
<p>Folgendes <a href="Syntaxdiagramm" title="Syntaxdiagramm">Syntaxdiagramm</a> zeigt alle Formen des Joins in SQL.<sup id="cite_ref-ISO_2-1" class="reference"><a href="#cite_note-ISO-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p><span class="mw-default-size" typeof="mw:File"></span>
</p><p>Im Syntaxdiagramm wird der Verbund von zwei „Tabellenreferenzen“ dargestellt. Eine „Tabellenreferenz“ kann selbst wieder eine Anweisung für einen Verbund sein, d. h., es können nicht nur Joins mit zwei, sondern mit mehreren Tabellen gebildet werden.
</p><p>Stellen wir uns in unserem Beispiel vor, dass es eine dritte Tabelle <code>Adresse</code> gibt, die über die Attribut <code>AdrId</code> dem Mitarbeiter seine Adresse zuordnet. Dann ergibt folgende Anweisung die Zuordnung der Adresse <i>und</i> der Abteilung zum jeweiligen Mitarbeiter:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">Mitarbeiter</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Adresse</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="p">(</span><span class="n">AdrId</span><span class="p">)</span>
<span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">Abteilung</span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="p">(</span><span class="n">AbtId</span><span class="p">)</span>
</pre></div>
<p>Der innere Verbund ist (bis auf die Reihenfolge der Attribute im Ergebnis) sowohl <a href="Kommutativgesetz" title="Kommutativgesetz">kommutativ</a> als auch <a href="Assoziativgesetz" title="Assoziativgesetz">assoziativ</a>. Der äußere Verbund ist nicht kommutativ, und im Allgemeinen auch nicht assoziativ. Werden in einer Anweisung mit mehreren Tabellen verschiedene Formen des Verbunds verwendet, ist es ratsam zur Klarheit Klammern zu verwenden.
</p>
<div style="clear:both;"></div>
<div class="mw-heading mw-heading2"><h2 id="Produktspezifisches">Produktspezifisches</h2></div>
<p>Die verschiedenen Datenbankmanagementsysteme weichen teilweise vom SQL-Standard ab oder haben andere Varianten für die Formulierung des äußeren Verbunds. Die folgenden Links verweisen auf die Dokumentation zum Join für einige der gängigen Produkte:
</p>
<ul><li><a rel="nofollow" class="external text" href="https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0059207.html">IBM Db2</a>
<ul><li>IBM <a href="Db2" title="Db2">Db2</a> unterstützt die Variante <code>NATURAL JOIN</code> nicht.</li></ul></li>
<li><a rel="nofollow" class="external text" href="https://docs.microsoft.com/de-de/sql/t-sql/queries/from-transact-sql?view=sql-server-2017">Microsoft SQL Server</a>
<ul><li>Der SQL-Dialekt für <a href="Microsoft_SQL_Server" title="Microsoft SQL Server">Microsoft SQL Server</a> heißt <a href="Transact-SQL" title="Transact-SQL">Transact-SQL</a>.</li>
<li>Transact SQL unterstützt die Formen <code>NATURAL JOIN</code> und <code>JOIN ... USING ...</code> des Joins nicht, es gibt also lediglich die Variante mit <code>ON</code>, mit der sich aber alle Aufgabenstellungen bewältigen lassen.</li></ul></li>
<li><a rel="nofollow" class="external text" href="https://dev.mysql.com/doc/refman/8.0/en/join.html">MySQL</a>
<ul><li><a href="MySQL" title="MySQL">MySQL</a> unterstützt alle Formen des Joins entsprechend SQL-92.</li>
<li>MySQL hat mit <code>STRAIGHT JOIN</code> eine spezielle Variante des Joins. Normalerweise entscheidet der <a href="Anfrageoptimierer" class="mw-redirect" title="Anfrageoptimierer">Anfrageoptimierer</a> eines Datenbankmanagementsystems, wie der Verbund tatsächlich ausgeführt wird. Mit <code>STRAIGHT JOIN</code> wird dem Optimierer von MySQL die Reihenfolge vorgegeben, wie der Join ausgeführt werden soll.</li>
<li>MySQL unterstützt den <code>FULL [OUTER] JOIN</code> nicht. Diese Form des äußeren Verbunds kann durch eine Konstruktion aus <code>LEFT/RIGHT OUTER JOIN</code> zusammen mit dem Operator <code>UNION</code> erzeugt werden.</li></ul></li>
<li><a rel="nofollow" class="external text" href="https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/Joins.html">Oracle</a>
<ul><li><a href="Oracle_(Datenbanksystem)" title="Oracle (Datenbanksystem)">Oracle</a> hat auch eine proprietäre Syntax für den äußeren Verbund, erst 2001 mit Version 9 wurde die Syntax von SQL-92 für den äußeren Verbund eingeführt.</li>
<li>Oracle empfiehlt heute für den äußeren Verbund die dem SQL-Standard entsprechende Syntax.</li></ul></li>
<li><a rel="nofollow" class="external text" href="https://www.postgresql.org/docs/11/queries-table-expressions.html">PostgreSQL</a>
<ul><li><a href="PostgreSQL" title="PostgreSQL">PostgreSQL</a> unterstützt alle Formen des Joins entsprechend SQL-92. (Die Dokumentation von PostgreSQL enthält ein <a rel="nofollow" class="external text" href="https://www.postgresql.org/docs/current/tutorial-join.html">Tutorial zum Join</a>.)</li></ul></li>
<li><a rel="nofollow" class="external text" href="https://www.sqlite.org/lang_select.html">SQLite</a>
<ul><li><a href="SQLite" title="SQLite">SQLite</a> unterstützt nur den <code>LEFT OUTER JOIN</code>. Die beiden anderen Formen des äußeren Verbunds können durch den <code>LEFT OUTER JOIN</code> zusammen mit dem Operator <code>UNION</code> erzeugt werden.</li></ul></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Siehe_auch">Siehe auch</h2></div>
<ul><li><a href="Relationale_Algebra#Join" title="Relationale Algebra">Join in der relationalen Algebra</a></li>
<li><a href="Relation_(Datenbank)" title="Relation (Datenbank)">Relation (Datenbank)</a></li>
<li><a href="Relation_(Mathematik)" title="Relation (Mathematik)">Relation (Mathematik)</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Literatur">Literatur</h2></div>
<ul><li>C. J. Date with Hugh Darwen: <cite style="font-style:italic">A Guide to the SQL Standard</cite>. 4. Auflage. Addison-Wesley, 1997.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Join+%28SQL%29&rft.au=C.+J.+Date+with+Hugh+Darwen&rft.btitle=A+Guide+to+the+SQL+Standard&rft.date=1997&rft.edition=4&rft.genre=book&rft.pub=Addison-Wesley" style="display:none"> </span></li>
<li>Wolfgang Panny mit Alfred Taudes: <cite style="font-style:italic">Einführung in den Sprachkern von SQL-99</cite>. Springer, 2000.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Join+%28SQL%29&rft.au=Wolfgang+Panny+mit+Alfred+Taudes&rft.btitle=Einf%C3%BChrung+in+den+Sprachkern+von+SQL-99&rft.date=2000&rft.genre=book&rft.pub=Springer" style="display:none"> </span></li>
<li>Gunter Saake, Kai-Uwe Sattler und Andreas Heuer: <cite style="font-style:italic">Datenbanken: Konzepte und Sprachen</cite>. 4. Auflage. mitp, 2010, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>221<span style="display:inline-block;width:.2em"> </span>f. und 339<span style="display:inline-block;width:.2em"> </span>f</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Join+%28SQL%29&rft.au=Gunter+Saake%2C+Kai-Uwe+Sattler+und+Andreas+Heuer&rft.btitle=Datenbanken%3A+Konzepte+und+Sprachen&rft.date=2010&rft.edition=4&rft.genre=book&rft.pages=221f+und+339f.&rft.pub=mitp" style="display:none"> </span></li>
<li><a href="Alfons_Kemper" title="Alfons Kemper">Alfons Kemper</a> und André Eckler: <cite style="font-style:italic">Datenbanksysteme: Eine Einführung</cite>. 6. Auflage. Oldenbourg, 2006, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>125<span style="display:inline-block;width:.2em"> </span>f</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Join+%28SQL%29&rft.au=Alfons+Kemper+und+Andr%C3%A9+Eckler&rft.btitle=Datenbanksysteme%3A+Eine+Einf%C3%BChrung&rft.date=2006&rft.edition=6&rft.genre=book&rft.pages=125f.&rft.pub=Oldenbourg" style="display:none"> </span></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Anmerkungen">Anmerkungen</h2></div>
<ol class="references" data-mw-group="Anm">
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Die Syntax von SQL92 hebt durch die Schlüsselworte <code>CROSS JOIN</code> die Absicht hervor, dass das kartesische Produkt gebildet werden soll.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Im Internet findet man sehr viele Artikel über den Verbund, bei dem er durch <a href="Mengendiagramm#Venn-Diagramme" title="Mengendiagramm">Venn-Diagramme</a> für Mengenoperationen veranschaulicht wird. In diesen Artikeln wird gern der innere Verbund von zwei Tabellen gebildet, die <i>dasselbe</i> Schema haben und <i>nur</i> in diesem Spezialfall ist der natürliche Verbund in der Tat identisch mit der Schnittmenge der beiden Tabellen. Im Allgemeinen ist dies aber <i>nicht</i> der Fall. In unserem Beispiel kann man die Schnittmenge der beiden Tabellen <code>Mitarbeiter</code> und <code>Abteilung</code> gar nicht bilden, weil die Datensätze der beiden Tabellen unterschiedlichen Aufbau haben und nicht vergleichbar sind. Die Visualisierung der Verbund-Operatoren durch Venn-Diagramme ist im Allgemeinen unzutreffend und deshalb irreführend.</span>
</li>
</ol>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-date-1"><span class="mw-cite-backlink"><a href="#cite_ref-date_1-0">↑</a></span> <span class="reference-text">C.J.Date with Hugh Darwen: A Guide to the SQL Standard, Fourth Edition, Addison-Wesley, 1997, S. 135ff.</span>
</li>
<li id="cite_note-ISO-2"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-ISO_2-0">a</a></sup> <sup><a href="#cite_ref-ISO_2-1">b</a></sup></span> <span class="reference-text">Die verschiedenen Arten des Verbunds werden im SQL-Standard SQL:2011 in <i>Part 2 Foundation</i> Abschnitt 7.7 beschrieben.</span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text">Gunther Saake, Kai-Uwe Sattler und Andreas Heuer: <cite style="font-style:italic">Datenbanken: Konzepte und Sprachen</cite>. mitp, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>339</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Join+%28SQL%29&rft.au=Gunther+Saake%2C+Kai-Uwe+Sattler+und+Andreas+Heuer&rft.btitle=Datenbanken%3A+Konzepte+und+Sprachen&rft.genre=book&rft.pages=339&rft.pub=mitp" style="display:none"> </span></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text">Gunther Saake, Kai-Uwe Sattler und Andreas Heuer: <cite style="font-style:italic">Datenbanken: Konzepte und Sprachen</cite>. mitp, <span style="white-space:nowrap">S.<span style="display:inline-block;width:.2em"> </span>220<span style="display:inline-block;width:.2em"> </span>f</span>.<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rfr_id=info:sid/de.wikipedia.org:Join+%28SQL%29&rft.au=Gunther+Saake%2C+Kai-Uwe+Sattler+und+Andreas+Heuer&rft.btitle=Datenbanken%3A+Konzepte+und+Sprachen&rft.genre=book&rft.pages=220f.&rft.pub=mitp" style="display:none"> </span></span>
</li>
</ol>
<p><br>
<style data-mw-deduplicate="TemplateStyles:r261921266">
/* start https://de.wikipedia.org/ */
.mw-parser-output table.erw-nav-zebra>tbody>:nth-child(odd){background-color:var(--dewiki-hintergrundfarbe-basis)}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste{background-color:#f5f5f5}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe{background-color:#e5ecf2}.mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,.mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#ececec}.mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt>.wikitable>*>tr{border-top:2px solid #fdfdfd!important;border-bottom:2px solid #fdfdfd!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-night .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-os .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable{border-top:0px!important;border-bottom:0px!important;margin-top:0!important;margin-bottom:0!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:first-of-type td{border-top:0px!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:last-of-type td{border-bottom:0px!important}
/* end https://de.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r260755238">
/* start https://de.wikipedia.org/ */
.mw-parser-output div.klappleiste{border:1px solid var(--dewiki-rahmenfarbe1);clear:both;font-size:95%;box-sizing:border-box;margin-top:1.5em;padding:2px}.mw-parser-output div.klappleiste:after{clear:both;content:"";display:block}.mw-parser-output div.klappleiste-bild{float:left;padding:2px}.mw-parser-output div.klappleiste-kopf{background:var(--dewiki-hintergrundfarbe5);color:var(--color-base,#202122);text-align:center;font-weight:bold}.mw-parser-output div.klappleiste.mw-collapsed .klappleiste-bild{display:none}.mw-parser-output div.klappleiste+div.klappleiste,.mw-parser-output div.klappleiste+link+div.klappleiste,.mw-parser-output div.klappleiste+link+link+div.klappleiste,.mw-parser-output div.klappleiste+link+style+div.klappleiste,.mw-parser-output div.klappleiste+style+div.klappleiste,.mw-parser-output div.klappleiste+style+style+div.klappleiste,.mw-parser-output div.klappleiste+style+link+div.klappleiste{margin-top:-1px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}
/* end https://de.wikipedia.org/ */
</style>
</p>
<div class="klappleiste mw-collapsible navileiste erweiterte-navigationsleiste navigation-not-searchable center erw-nav-farbschema-blau" role="navigation">
<div class="klappleiste-kopf"><a href="SQL" title="SQL">SQL</a><div class="erweiterte-navigationsleiste-quicklinks" style="float:left; font-weight:normal; font-size:75%; margin-left:1em; margin-right:2em; display:none;"><span title="Vorlage anzeigen">V</span> </div></div>
<div class="klappleiste-inhalt mw-collapsible-content" style="clear:left">
<table class="wikitable erw-nav-zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.0em;">
<tbody><tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b><a href="Anweisung_(Programmierung)" title="Anweisung (Programmierung)">Anweisungen</a> und Klauseln</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p>As •
Case •
Create •
Delete •
<a href="From_(SQL)" title="From (SQL)">From</a> •
Having •
Insert •
<a class="mw-selflink selflink">Join</a> •
Merge •
Null •
Order by •
Prepare •
Select •
Truncate •
Union •
<a href="Update_(SQL)" title="Update (SQL)">Update</a> •
Where •
With
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 1px solid #FFF;padding: 0 1em;"><b>Varianten</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="PL/SQL" title="PL/SQL">PL/SQL</a> •
<a href="Transact-SQL" title="Transact-SQL">Transact-SQL</a> •
<a href="Open_SQL" title="Open SQL">Open SQL</a> •
<a href="Embedded_SQL" title="Embedded SQL">Embedded SQL</a> •
<a href="PostgreSQL" title="PostgreSQL">PostgreSQL</a>
</p>
</td></tr>
</tbody></table></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-10-03" href="https://de.wikipedia.org/wiki/?title=Join_(SQL)&oldid=249098107">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>